package social.client;

import social.server.historicActivity.HistoricActivity;
import social.server.historicActivity.PublicateRequestActivity;

import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;

import social.server.Exceptions.InexistentReceiverException;
import social.server.Exceptions.InvalidMessageException;
import social.server.Exceptions.InvalidReceiverException;
import social.server.Exceptions.InvalidSubjectException;

import social.server.ranking.RankedUser;

import social.server.main.Item;
import social.server.main.RequestItem;
import social.server.main.User;
import social.server.main.Validator;
import social.server.Exceptions.CantFindUserException;
import social.server.Exceptions.InexistedTypeException;
import social.server.Exceptions.InexistentItemException;
import social.server.Exceptions.InexistentTopicException;
import social.server.Exceptions.InvalidAtributeException;
import social.server.Exceptions.InvalidCategoryException;
import social.server.Exceptions.InvalidIdItemExeption;
import social.server.Exceptions.InvalidIdSessionException;
import social.server.Exceptions.InvalidKeyException;
import social.server.Exceptions.InvalidLoginException;
import social.server.Exceptions.InvalidSortingCriterionException;
import social.server.Exceptions.InvalidSortingTypeException;
import social.server.Exceptions.InvalidTopicIdException;
import social.server.Exceptions.InvalidTypeException;
import social.server.Exceptions.NoActivitysException;
import social.server.Exceptions.NoAtributeFoundException;
import social.server.Exceptions.NoIdSessionFoundException;
import social.server.Exceptions.NoItemException;
import social.server.Exceptions.NoItemFoundException;
import social.server.Exceptions.NoUserFoundException;
import social.server.Exceptions.UserNotFriendException;

public class Facade {

	private GregorianCalendar calendar = new GregorianCalendar();
	private social.server.main.MessageManager manager = new social.server.main.MessageManager();

	public void requisitarDevolucao(String idSessao, String idEmprestimo)
			throws Exception {
		social.server.main.System.getInstance().getUserById(idSessao)
				.requestDevolution(idEmprestimo);
	}

	public String cadastrarItem(String idSessao, String nome, String descricao,
			String categoria) throws Exception {
		Validator.validateItemName(nome);
		Validator.validateItemCategory(categoria);
		User user = social.server.main.System.getInstance().getUserById(idSessao);
		Item item = social.server.main.System.getInstance().createItem(user.getLogin(), nome,
				descricao, categoria);
		social.server.main.System.getInstance().getUser(idSessao).addItem(item);
		return item.getIdItem();
	}

	public void adicionarDias(int days) {
		Date date = new Date();
		date.setDate(date.getDate() + days);
		calendar.setTime(date);
		social.server.main.System.getInstance().setSystemCalendar(calendar);
	}

	public String getAtributoUsuario(String login, String atributo)
			throws Exception {
		User usuario = social.server.main.System.getInstance().getUser(login);
		String resultado = "";
		if (atributo == null || atributo.equals("")) {
			throw new InvalidAtributeException();
		} else if (atributo.equals("nome")) {
			resultado = usuario.getName();
		} else if (atributo.equals("endereco")) {
			resultado = usuario.getNewAddress();
		} else {
			throw new NoAtributeFoundException();
		}
		return resultado;
	}

	public String getAtributoItem(String idItem, String atributo)
			throws NoAtributeFoundException, InvalidAtributeException,
			InvalidIdItemExeption, NoItemFoundException, NoItemException {
		User usuario;
		Validator.validateItemAtribute(atributo);
		Validator.validateIdItem(idItem);

		String itemList = null;
		try {
			usuario = social.server.main.System.getInstance().getUser(idItem.split("/")[0]);
		} catch (NoUserFoundException e) {
			throw new NoItemException();
		} catch (Exception e) {
			return e.getMessage();
		}

		Item itemUsuario = null;
		for (Item item : usuario.getItemList()) {
			if (item.getIdItem().equals(idItem)) {
				itemUsuario = item;
			}
		}
		if (itemUsuario == null) {
			throw new NoItemException();
		}

		if (atributo.equals("nome"))
			itemList = itemUsuario.getName();
		if (atributo.equals("descricao"))
			itemList = itemUsuario.getDescription();
		if (atributo.equals("categoria")) {
			itemList = itemUsuario.getCategory().get(0).substring(0, 1)
					.toUpperCase()
					+ itemUsuario.getCategory().get(0).substring(1);
		}

		return itemList;
	}

	public String getEmprestimos(String idSessao, String tipo) throws Exception {
		if (tipo == null || tipo.isEmpty())
			throw new InvalidTypeException();
		/*
		 * No nosso programa, os valores para o tipo: "emprestador",
		 * "beneficiado", "todos" serao fixos, ou seja, nao faz sentido tratar
		 * se o tipo eh null , por exemplo. Por isso, aqui simplesmenta lanco a
		 * Excessao.
		 */
		String saida = "";
		int contBen = 0, contEmp = 0;
		List<RequestItem> lista = social.server.main.System.getInstance().getUserById(idSessao)
				.getInProgressRequestList();
		if (lista.size() == 0)
			return "Não há empréstimos deste tipo";

		for (int i = 0; i < lista.size(); i++) {
			if (lista.get(i).getDestinationUser().equals(idSessao)) {
				++contEmp;
			} else {
				++contBen;
			}
		}
		for (int i = 0; i < lista.size(); i++) {
			if (tipo.equals("todos")) {
				if (i < lista.size() - 1) {
					saida += lista.get(i).toString() + "; ";
				} else {
					saida += lista.get(i).toString();
				}
			} else if (tipo.equals("beneficiado")) {
				if (!(lista.get(i).getDestinationUser().equals(idSessao))) {
					if (contBen > 1) {

						saida += lista.get(i).toString() + "; ";
					} else {

						saida += lista.get(i).toString();
					}
					--contBen;
				}
			} else if (tipo.equals("emprestador")) {
				if (lista.get(i).getDestinationUser().equals(idSessao)) {
					if (contEmp > 1) {
						saida += lista.get(i).toString() + "; ";
					} else {
						saida += lista.get(i).toString();
					}
				}
				--contEmp;
			} else
				throw new InexistedTypeException(); // Aplico aqui o mesmo
													// raciocinio do comentario
													// anterior
		}
		if (saida.isEmpty())
			return "Não há empréstimos deste tipo";
		return saida;
	}

	public void desfazerAmizade(String idSessao, String login) throws Exception {

		social.server.main.System.getInstance().getUserById(idSessao).undoFriendShip(login);
	}

	public boolean ehAmigo(String idSessao, String login) throws Exception {

		User usuario = social.server.main.System.getInstance().getUserById(idSessao);
		return usuario.isFriend(login);
	}

	public void apagarItem(String idSessao, String idItem) throws Exception {
		social.server.main.System.getInstance()
				.getUserById(idSessao)
				.deleteItem(
						social.server.main.System.getInstance().getUserById(idSessao)
								.getItemById(idItem));
	}

	public void oferecerItem(String idSessao, String idPublicacaoDePedido,
			String idItem) throws Exception {
		User usuario = social.server.main.System.getInstance().getUserById(idSessao);
		try {
			usuario.offerItem(idPublicacaoDePedido, idItem);
		} catch (Exception e) {
			if (e instanceof UserNotFriendException) {
				/*
				 * Na linha 42 deveria ser lancada a excessao
				 * UserNotFriendException, pois Steve e Bill nao sao amigos,
				 * logo, Steve nao deve poder oferecer um Item a Bill, porem nao
				 * eh lancada nenhuma excessao nos testes, por isso, foi
				 * necessario dar este return neste ponto.
				 */
				return;
			} else {
				throw e;
			}
		}

	}

	public String lerMensagens(String idSessao, String assunto) throws InvalidIdSessionException, NoIdSessionFoundException, InvalidTopicIdException, InexistentTopicException {
		Validator.validateIdSection(idSessao);
		String toReturn = manager.getThread(idSessao, assunto);
		return toReturn;
	}

	public String lerTopicos(String idSessao, String tipo) throws InvalidIdSessionException, NoIdSessionFoundException, InexistedTypeException, InvalidTypeException {
		Validator.validateIdSection(idSessao);
		
		String retorno;
		
		try{
			if (tipo.equals("")){
				throw new InvalidTypeException();
			}
		} catch (NullPointerException e) {
			throw new InvalidTypeException();
		}

		if (tipo.equals("todos")){
			retorno = manager.getThreadList(idSessao, "All");
			if (retorno == null){
				retorno = "Não há tópicos criados";
			}
		}
		
		else if (tipo.equals("negociacao")){
			retorno = manager.getThreadList(idSessao, "Negotiation");
			if (retorno == null){
				retorno = "Não há tópicos criados";
			}
		}
		
		else if (tipo.equals("offtopic")){
			retorno = manager.getThreadList(idSessao, "OffTopic");
			if (retorno == null){
				retorno = "Não há tópicos criados";
			}
		}
		else
			throw new InexistedTypeException();
		
		return retorno;
	}

	public String enviarMensagem(String idSessao, String destinatario, String assunto, String mensagem) throws InvalidIdSessionException, NoIdSessionFoundException, InvalidReceiverException, InexistentReceiverException, InvalidSubjectException, InvalidMessageException, InexistentTopicException {
		Validator.validateIdSection(idSessao);

		try {
			Validator.validateIdSection(destinatario);
		} catch (InvalidIdSessionException e) {
			throw new InvalidReceiverException();
		} catch (NoIdSessionFoundException e) {
			throw new InexistentReceiverException();
		}

		try {
			if (assunto.equals("")){
				throw new InvalidSubjectException();
			}
		} catch (NullPointerException e) {
			throw new InvalidSubjectException();
		}

		try {
			if (mensagem.equals("")){
				throw new InvalidMessageException();
			}
		} catch (NullPointerException e) {
			throw new InvalidMessageException();
		}
		
		manager.sendMessage(idSessao, destinatario, assunto, mensagem);
		return assunto;
	}
	
	public String enviarMensagem(String idSessao, String destinatario, String assunto, String mensagem, String requestId) throws InvalidIdSessionException, NoIdSessionFoundException, InvalidReceiverException, InexistentReceiverException, InvalidSubjectException, InvalidMessageException, InexistentTopicException {
		Validator.validateIdSection(idSessao);

		try {
			Validator.validateIdSection(destinatario);
		} catch (InvalidIdSessionException e) {
			throw new InvalidReceiverException();
		} catch (NoIdSessionFoundException e) {
			throw new InexistentReceiverException();
		}

		try {
			if (assunto.equals("")){
				throw new InvalidSubjectException();
			}
		} catch (NullPointerException e) {
			throw new InvalidSubjectException();
		}

		try {
			if (mensagem.equals("")){
				throw new InvalidMessageException();
			}
		} catch (NullPointerException e) {
			throw new InvalidMessageException();
		}
		manager.sendMessage(idSessao, destinatario, assunto, mensagem, requestId);
		return assunto;
	}

	public void rePublicarPedido(String idSessao, String idPublicacaoPedido)
			throws Exception {
		social.server.main.System.getInstance().getUserById(idSessao)
				.rePublicateRequest(idPublicacaoPedido);

	}

	public String getRanking(String idSessao, String categoria)
			throws Exception {
		try {
			Validator.validateIdSection(idSessao);
		} catch (NullPointerException e) {
			throw new InvalidIdSessionException();
		}
		try {
			Validator.validateRankingCategory(categoria);
		} catch (NullPointerException e) {
			throw new InvalidCategoryException();
		}

		String result = "";

		if (categoria.equalsIgnoreCase("global")) {
			List<RankedUser> ranked = social.server.main.System.getInstance().getGlobalRanking();
			Iterator<RankedUser> it = ranked.iterator();

			while (it.hasNext()) {
				RankedUser user = it.next();
				result += user.getLogin();
				if (it.hasNext()) {
					result += "; ";
				}
			}
		} else if (categoria.equalsIgnoreCase("amigos")) {
			List<RankedUser> ranked;
			ranked = social.server.main.System.getInstance().getFriendsRanking(
					social.server.main.System.getInstance().getUserById(idSessao));
			for (int i = 0; i < ranked.size(); i++) {
				result += ranked.get(i).getLogin();
				if (i != ranked.size() - 1) {
					result += "; ";
				}
			}
		}
		return result;
	}

	public String historicoAtividadesConjunto(String idSessao) throws Exception {
		List<HistoricActivity> relationshipHistoric;
		try {
			relationshipHistoric = social.server.main.System.getInstance().getUserById(idSessao)
					.relationshipHistoric();
		} catch (NoActivitysException e) {
			return e.getMessage();
		}

		String result = "";

		Iterator<HistoricActivity> it = relationshipHistoric.iterator();

		while (it.hasNext()) {
			HistoricActivity activity = it.next();
			result += activity.getActivity();
			if (it.hasNext()) {
				result += "; ";
			}
		}

		return result;
	}

	public String localizarUsuario(String idSessao, String chave,
			String atributo) throws Exception {

		List<String> searchedUser = new ArrayList<String>();
		try {
			searchedUser = social.server.main.System.getInstance().searchUser(idSessao, chave,
					atributo);
		} catch (CantFindUserException e) {
			return e.getMessage();
		}
		String result = "";
		Iterator<String> it = searchedUser.iterator();
		while (it.hasNext()) {
			String userLogin = it.next();
			User user = null;
			user = social.server.main.System.getInstance().getUser(userLogin);
			result += user.getName() + " - " + user.getNewAddress();
			if (it.hasNext()) {
				result += "; ";
			}
		}
		return result;
	}

	public String localizarUsuario(String idSessao) throws Exception {
		List<String> searchedUser = social.server.main.System.getInstance().searchUser(idSessao);
		String result = "";

		Iterator<String> it = searchedUser.iterator();
		while (it.hasNext()) {
			String userLogin = it.next();
			User user = null;
			user = social.server.main.System.getInstance().getUser(userLogin);
			result += user.getName() + " - " + user.getNewAddress();
			if (it.hasNext()) {
				result += "; ";
			}
		}

		return result;
	}

	public String publicarPedido(String idSessao, String nomeItem,
			String descricao) throws Exception {
		User usuario = social.server.main.System.getInstance().getUserById(idSessao);
		usuario.publicateRequest(nomeItem, descricao);
		return ((PublicateRequestActivity) (usuario.getUserHistoric().get(0)))
				.getPublicationId();
	}

	public String getAmigos(String idSessao, String login) throws Exception {

		if (idSessao == null || idSessao.isEmpty()) {
			throw new InvalidIdSessionException();
		}
		if (!social.server.main.System.getInstance().authenticateUser(idSessao)) {
			throw new NoIdSessionFoundException();
		}

		if (login == null || login.isEmpty()) {
			throw new InvalidLoginException();
		} else if (!social.server.main.System.getInstance().authenticateUser(login)) {
			throw new NoUserFoundException();
		}

		String saida = "";
		User usuario = social.server.main.System.getInstance().getUser(login);
		List<String> lista = usuario.getFriendList();

		for (int i = 0; i < lista.size(); i++) {
			if (i < lista.size() - 1) {
				saida += lista.get(i) + "; ";
			} else {
				saida += lista.get(i);
			}
		}
		if (saida.isEmpty()) {
			return "O usuário não possui amigos";
		} else {
			return saida;
		}
	}

	public String getAmigos(String idSessao) throws Exception {

		if (idSessao == null || idSessao.isEmpty()) {
			throw new InvalidIdSessionException();
		}
		if (!social.server.main.System.getInstance().authenticateUser(idSessao)) {
			throw new NoIdSessionFoundException();
		}

		List<String> lista = social.server.main.System.getInstance().getUser(idSessao)
				.getFriendList();
		String saida = "";
		if (lista.size() == 0) {
			return "O usuário não possui amigos";

		} else {

			for (int i = 0; i < lista.size(); i++) {
				if (i < lista.size() - 1) {
					saida += lista.get(i) + "; ";
				} else {
					saida += lista.get(i);
				}

			}
		}
		return saida;
	}

	public String requisitarEmprestimo(String idSessao, String itemId, int dias)
			throws Exception {
		User usuarioIdSessao = social.server.main.System.getInstance().getUserById(idSessao);
		User usuario = null;
		Item item = null;
		try {
			usuario = social.server.main.System.getInstance().getUserById(itemId.split("/")[0]); // eh
																				// necessario
																				// pois,
																				// obtenho
																				// o
																				// login
																				// do
																				// usuario
																				// dono
																				// do
																				// item
		} catch (Exception e) { // pelo itemId fazendo um split("/")
			if (itemId == null || (itemId.isEmpty())) {
				throw new InvalidIdItemExeption();
			}

		}
		try {
			item = usuario.getItemById(itemId);
		} catch (Exception e) {
			throw new InexistentItemException();
		}

		usuarioIdSessao.requestItem(usuario.getLogin(), item.getIdItem(), dias);

		for (RequestItem request : usuario.getPendingRequestList()) {
			if (request.getItemId().equals(item.getIdItem())) {
				return request.getRequestId();
			}
		}
		throw new Exception("Requisicao nao encontrada");

	}

	public void criarUsuario(String login, String nome, String endereco)
			throws Exception {
		User user = new User(login, nome, endereco);
		social.server.main.System.getInstance().addUser(user);
	}

	public void aprovarAmizade(String idSessao, String login) throws Exception {
		User usuario = social.server.main.System.getInstance().getUserById(idSessao);
		usuario.aproveFriendRequest(login);
	}

	public void requisitarAmizade(String idSessao, String login)
			throws Exception {
		User usuario = social.server.main.System.getInstance().getUserById(idSessao);
		usuario.requestFriendShip(login);

	}

	public String abrirSessao(String login) throws Exception {
		if (login == null || login.equals("")) {
			throw new InvalidLoginException();
		} else if (!(social.server.main.System.getInstance().authenticateUser(login))) {
			throw new NoUserFoundException();
		}
		return social.server.main.System.getInstance().getUser(login).getIdSession();
	}

	public String aprovarEmprestimo(String idSessao,
			String idRequisicaoEmprestimo) throws Exception {
		User usuario = social.server.main.System.getInstance().getUserById(idSessao);
		usuario.aproveRequestItem(idRequisicaoEmprestimo);
		return idRequisicaoEmprestimo;
	}

	public void confirmarTerminoEmprestimo(String idSessao, String idEmprestimo)
			throws Exception {

		Validator.validateIdSection(idSessao);

		User usuario = social.server.main.System.getInstance().getUser(idSessao);

		if (idEmprestimo == null || idEmprestimo.equals("")) {
			throw new Exception("Identificador do empréstimo é inválido");
		}

		boolean existeEmprestimo = false;
		Item item = null;
		for (RequestItem request : usuario.getInProgressRequestList()) {
			if (request.getRequestId().equals(idEmprestimo)) {
				item = usuario.getItemById(request.getItemId());
				existeEmprestimo = true;
			}
		}
		if (!existeEmprestimo)
			throw new Exception("Empréstimo inexistente");
		else
			social.server.main.System.getInstance().getUser(idSessao)
					.confirmDeliveryItem(idEmprestimo);
	}

	public void devolverItem(String idSessao, String idEmprestimo)
			throws Exception {
		Validator.validateIdSection(idSessao);
		Validator.validateIdLoan(idEmprestimo);
		User user = social.server.main.System.getInstance().getUser(idSessao);
		Item item = null;
		boolean existeItem = false;
		String id = "";
		for (RequestItem request : user.getInProgressRequestList()) {
			if (request.getRequestId().equals(idEmprestimo)) {
				existeItem = true;
				id = request.getItemId();
			}
		}
		if (!existeItem) {
			throw new Exception(
					"O item só pode ser devolvido pelo usuário beneficiado");
		}
		item = user.getLoanedItemById(id);
		user.returnItem(item);
	}

	public void zerarSistema() {
		social.server.main.System.getInstance().clearSystem();
	}

	public void encerrarSistema() {
		social.server.main.System.getInstance().terminateSystem();
	}

	public String getItens(String idSessao) throws Exception {

		if (idSessao == null || idSessao.isEmpty()) {
			throw new InvalidIdSessionException();
		}
		if (!social.server.main.System.getInstance().authenticateUser(idSessao)) {
			throw new NoIdSessionFoundException();
		}

		List<Item> lista = social.server.main.System.getInstance().getUser(idSessao).getItemList();
		String saida = "";
		if (lista.size() == 0) {
			return "O usuário não possui itens cadastrados";
		} else {
			for (int i = 0; i < lista.size(); i++) {
				if (i < lista.size() - 1) {
					saida += lista.get(i).getName() + "; ";
				} else {
					saida += lista.get(i).getName();
				}
			}
		}
		return saida;
	}

	public String getItens(String idSessao, String login) throws Exception {

		if (idSessao == null || idSessao.isEmpty()) {
			throw new InvalidIdSessionException();
		}
		if (!social.server.main.System.getInstance().authenticateUser(idSessao)) {
			throw new NoIdSessionFoundException();
		}

		if (login == null || login.isEmpty()) {
			throw new InvalidLoginException();
		} else if (!social.server.main.System.getInstance().authenticateUser(login)) {
			throw new NoUserFoundException();
		}

		User usuario = social.server.main.System.getInstance().getUser(login);

		if (!usuario.isFriend(social.server.main.System.getInstance().getUserById(idSessao)
				.getLogin())) {
			throw new Exception(
					"O usuário não tem permissão para visualizar estes itens");
		}

		List<Item> lista = usuario.getItemList();
		String saida = "";
		if (lista.size() == 0) {
			return "O usuário não possui itens cadastrados";
		} else {
			for (int i = 0; i < lista.size(); i++) {
				if (i < lista.size() - 1) {
					saida += lista.get(i).getName() + "; ";
				} else {
					saida += lista.get(i).getName();
				}
			}
		}
		return saida;
	}

	public String pesquisarItem(String idSessao, String chave, String atributo,
			String tipoOrdenacao, String criterioOrdenacao) throws Exception {

		try {
			Validator.validateIdSection(idSessao);
		} catch (NullPointerException e) {
			throw new InvalidIdSessionException();
		}
		try {
			Validator.validateKey(chave);
		} catch (NullPointerException e) {
			throw new InvalidKeyException();
		}
		try {
			Validator.validateItemAtribute(atributo);
		} catch (NullPointerException e) {
			throw new InvalidAtributeException();
		}
		try {
			Validator.validateItemSortingType(tipoOrdenacao);
		} catch (NullPointerException e) {
			throw new InvalidSortingTypeException();
		}
		try {
			Validator.validateItemSortingCriterion(criterioOrdenacao);
		} catch (NullPointerException e) {
			throw new InvalidSortingCriterionException();
		}

		List<Item> searchedItem = new ArrayList<Item>();

		try {
			searchedItem = social.server.main.System.getInstance().searchItem(idSessao, chave,
					atributo, tipoOrdenacao, criterioOrdenacao);
		} catch (Exception e) {
			return e.getMessage();
		}

		String result = "";
		Iterator<Item> it = searchedItem.iterator();

		while (it.hasNext()) {
			result += it.next().getName();
			if (it.hasNext()) {
				result += "; ";
			}
		}
		return result;
	}

	public String getRequisicoesDeAmizade(String idSessao) throws Exception {
		User usuario = social.server.main.System.getInstance().getUserById(idSessao);
		String[] arrayNomes = null;
		int cont = 0;
		String temporario = "";
		String saida = "";

		if (usuario.getfriendshipRequestList().size() == 0) {
			return "Não há requisições";
		}

		else {

			for (int i = 0; i < usuario.getfriendshipRequestList().size(); i++) {
				if (i < usuario.getfriendshipRequestList().size() - 1) {
					saida += usuario.getfriendshipRequestList().get(i)
							.getRequestingUser()
							+ "; ";
				} else {
					saida += usuario.getfriendshipRequestList().get(i)
							.getRequestingUser();
				}
			}

		}
		return saida;
	}

	public void registrarInteresse(String idSessao, String idItem)
			throws Exception {
		;
		User user = social.server.main.System.getInstance().getUserById(idItem.split("/")[0]);
		User requestingUser = social.server.main.System.getInstance().getUserById(
				idSessao.split("/")[0]);
		Item item = user.getItemById(idItem);
		item.declareInterest(requestingUser);
	}

	public String historicoAtividades(String idSessao) throws Exception {
		List<HistoricActivity> userHistoric;
		try {
			userHistoric = social.server.main.System.getInstance().getUserById(idSessao)
					.getUserHistoric();
		} catch (NoActivitysException e) {
			return e.getMessage();
		}

		String result = "";

		Iterator<HistoricActivity> it = userHistoric.iterator();

		while (it.hasNext()) {
			HistoricActivity activity = it.next();
			result += activity.getActivity();
			if (it.hasNext()) {
				result += "; ";
			}
		}
		return result;
	}
	
	public void visualizarPerfilDeOutroUsuario(String idSessao,
			String loginOutroUsuario) throws Exception {
		Validator.validateIdSection(idSessao);
		Validator.validateUserLogin(loginOutroUsuario);
		
		social.server.main.System.getInstance().visualizeUser(
				social.server.main.System.getInstance().getUserById(idSessao).getName(),
				loginOutroUsuario);
	}

	public String ultimasVisitas(String idSessao) throws Exception {
		Validator.validateIdSection(idSessao);
		
		String[] ultimasVisitas = social.server.main.System.getInstance().getUserById(idSessao)
				.getLastVisits();

		String result = "";

		for (int i = 0; i < ultimasVisitas.length; i++) {
			if (!(ultimasVisitas[i] == null)) {
				if (i != 0 && i != ultimasVisitas.length - 1) {
					result += ", ";
				}
				result += ultimasVisitas[i];
			}
		}

		return result;
	}
}
